﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ModelUML
{
    [Serializable]
    public class InterfejsUML : ElementUML
    {
        public override List<string> Validate()
        {
            List<String> lista = new List<string>();
            if (Nazwa.Length == 0) lista.Add("interfejs nie ma nazway");
            else
            {
                foreach (char c in Nazwa)
                {
                    if (!char.IsLetterOrDigit(c) && !c.Equals('_'))
                    {
                        lista.Add(String.Format("interfejs \"{0}\" posiada nieprawidłowe znaki w nazwie", Nazwa));
                        break;
                    }
                }
            }
            foreach (OperacjaUML op in operacje)
            {
                lista.AddRange(op.Validate());
            }
            foreach (ElementUML el in Model1.staticModel.Elementy)
            {
                if (el.JestKlasa && el.Nazwa.Equals(Nazwa)) lista.Add(String.Format("istnieje klasa i interfejs o tej samej nazwie: \"{0}\"", Nazwa));
            }
            return lista;
        }
        public List<iInterfejs> lista_iKlas;
        internal KontenerUML kontener = null;
        public InterfejsUML(String nazwa)
        {
            lista_iKlas = new List<iInterfejs>();
            Nazwa = nazwa;
            operacje = new KolekcjaUML();            
        }
        internal KolekcjaUML operacje;
        public void DodajOperacje(OperacjaUML operacja)
        {
            operacje.Dodaj(operacja);
        }
        public OperacjaUML DodajOperacje(String nazwa, String nazwaTypu)
        {
            OperacjaUML operacja = null;
            bool typIstnieje = false;
            TypDanychUML typ = null;
            foreach (ElementUML e in kontener.Elementy)
            {
                if (e.Nazwa == null) continue;
                if (e.Nazwa.Equals(nazwaTypu))
                {
                    typIstnieje = true;
                    typ = (TypDanychUML)e;
                    break;
                }
            }
            if (!typIstnieje)
            {
                typ = kontener.DodajPrymityw(nazwaTypu);
            }
            operacja = new OperacjaUML(nazwa, typ);
            operacje.Dodaj(operacja);
            return operacja;
        }
        public int IloscOperacji
        {
            get
            {
                return operacje.Count;
            }
        }
        public OperacjaUML GetOperacje(int index)
        {
            return (OperacjaUML)operacje[index];
        }
        public void UsunOperacje(OperacjaUML operacja)
        {
            operacje.Usun(operacja);
        }
    }
}
